home *** CD-ROM | disk | FTP | other *** search
/ NeXT Enterprise Objects Framework 1.1 / NeXT Enterprise Objects Framework 1.1.iso / NextDeveloper / Examples / EnterpriseObjects / DistributedEO / DEOClient.subproj / DOExtensions.subproj / FoundationExtensionsPrivate.m < prev    next >
Encoding:
Text File  |  1995-02-17  |  3.8 KB  |  141 lines

  1. /*
  2.    FoundationExtensionsPrivate.m modified by enoyau on Fri 13-Jan-1995
  3.  
  4.    You may freely copy, distribute, and reuse the code in this example.
  5.    NeXT disclaims any warranty of any kind, expressed or implied, as to its
  6.    fitness for any particular use.
  7. */
  8. /*
  9.  *  Private classes for the compatibility routines between the old DO
  10.  *  mechanisms and the new Foundation objects.
  11.  *
  12.  *  No guarantee is made for the fitness of this code for any particular
  13.  *  use.  No warranty expressed or implied.  Use at your own risk!
  14.  *
  15.  *  Randy Tidd
  16.  *  NeXT Premium Developer Support
  17.  */
  18. #import "FoundationExtensionsPrivate.h"
  19. #import <remote/transport.h>
  20. #import <foundation/NSUtilities.h>
  21. #import <foundation/NSException.h>
  22.  
  23. @implementation _NSArrayPlaceHolder
  24. - initWithArray:(NSArray *)anArray
  25. {
  26.     [super init];
  27.     array = [anArray copy];
  28.     return self;
  29. }
  30.  
  31. - free
  32. {
  33.     [array release];
  34.     return [super free];
  35. }
  36.  
  37. - encodeUsing:(id <NXEncoding>)portal
  38. {
  39.     unsigned count, i;
  40.  
  41.     // First encode the count
  42.     count = [array count];
  43.     [portal encodeData:&count ofType:"i"];
  44.  
  45.     // Then encode the objects one by one
  46.     for(i=0; i<[array count]; i++) {
  47.         [portal encodeObject:[array objectAtIndex:i]];
  48.     }
  49.     return self;
  50. }
  51.  
  52. - decodeUsing:(id <NXDecoding>)portal
  53. {
  54.     NSMutableArray *newArray = nil;
  55.     unsigned count, i;
  56.  
  57.     // We encoded the count first, and here it is
  58.     [portal decodeData:&count ofType:"i"];
  59.     newArray = [NSMutableArray arrayWithCapacity:count];
  60.  
  61.     // Decode the objects one by one and add them to the array
  62.     for(i=0; i<count; i++) {
  63.         [newArray addObject:[portal decodeObject]];
  64.     }
  65.  
  66.     /*
  67.      *  We return our mutable array instance here even though we might
  68.      *  be the placeholder for a regular NSArray.  There is usually no
  69.      *  harm in returning a mutable array in place of an immutable one.
  70.      *  If there is, you need to implement some smarts here to return an
  71.      *  instance of the appropriate class.
  72.      */
  73.     return newArray;
  74. }
  75. @end
  76.  
  77. @implementation _NSDictionaryPlaceHolder
  78. - initWithDictionary:(NSDictionary *)aDictionary
  79. {
  80.     [super init];
  81.     dictionary = [aDictionary copy];
  82.     return self;
  83. }
  84.  
  85. - free
  86. {
  87.     [dictionary release];
  88.     return [super free];
  89. }
  90.  
  91. - encodeUsing:(id <NXEncoding>)portal
  92. {
  93.     unsigned count;
  94.     NSEnumerator *enumerator = [dictionary keyEnumerator];
  95.     NSString *key;
  96.  
  97.     // First encode the count
  98.     count = [dictionary count];
  99.     [portal encodeData:&count ofType:"i"];
  100.  
  101.     // Then encode the objects one by one
  102.     while(key = [enumerator nextObject]) {
  103.         [portal encodeObject:key];
  104.         [portal encodeObject:[dictionary objectForKey:key]];
  105.     }
  106.     return self;
  107. }
  108.  
  109. - decodeUsing:(id <NXDecoding>)portal
  110. {
  111.     NSMutableDictionary *newDictionary = nil;
  112.     unsigned count, i;
  113.  
  114.     // We encoded the count first, and here it is
  115.     [portal decodeData:&count ofType:"i"];
  116.     newDictionary = [NSMutableDictionary dictionaryWithCapacity:count];
  117.  
  118.     // Decode the objects one by one and add them to the array
  119.     for(i=0; i<count; i++) {
  120.         id newKey, newObject;
  121.         newKey = [portal decodeObject];
  122.         newObject = [portal decodeObject];
  123.         if(!newKey || !newObject) {
  124.             // This should never happen, or we're in trouble.
  125.             [NSException raise:NSInternalInconsistencyException format:@"%s: %s: can't decode key or object",
  126.                 isa->name, sel_getName(_cmd)];
  127.         } else {
  128.         [newDictionary setObject:newObject forKey:newKey];
  129.     }
  130.     }
  131.     /*
  132.      *  We return our mutable dictionary instance here even though we might
  133.      *  be the placeholder for a regular NSDictionary.  There is usually no
  134.      *  harm in returning a mutable dictionary in place of an immutable one.
  135.      *  If there is, you need to implement some smarts here to return an
  136.      *  instance of the appropriate class.
  137.      */
  138.     return newDictionary;
  139. }
  140. @end
  141.